package com.ruijie.acl.service;

import java.util.List;

import com.ruijie.acl.AccessGroup;
import com.ruijie.acl.AclDevice;
import com.ruijie.acl.AclDeviceTimeRange;
import com.ruijie.acl.TimeRange;
import com.ruijie.emp.device.Device;
import com.ruijie.foundation.annotation.DomainService;
import com.ruijie.foundation.dao.support.Page;
import com.ruijie.foundation.service.Repository;

/**
 * <p>
 * Title: ACL设备与ACL时间段关联的服务接口类
 * </p>
 * <p>
 * Description: 为ACL组和ACL时间段关联关系提供逻辑处理，以及数据库的操作。
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: Ruijie Co., Ltd.
 * </p>
 * <p>
 * Create Time: 2009-07-15
 * </p>
 * <p>
 * Update Time:
 * </p>
 * <p>
 * Updater:
 * </p>
 * <p>
 * Update Comments:
 * </p>
 * @author ASAI
 */
@DomainService
public interface DeviceTimeRangeService extends Repository<AclDeviceTimeRange> {

	/**
	 * 根据ACL设备分页查询ACL时间段
	 * @param aclDevice　ACL设备
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL时间段
	 */
	public Page pagedQueryByDevcie(AclDevice aclDevice, int pageNo, int pageSize);
	
	/**
	 * 根据ACL时间段分页查询ACL设备
	 * @param timeRange　ACL时间段
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL设备
	 */
	public Page pagedQueryByTimeRange(TimeRange timeRange, int pageNo, int pageSize);
	
	/**
	 * 根据ACL设备和时间段取得关系对象
	 * @param aclDevice ACL设备
	 * @param timeRange 时间段
	 * @return 关系对象
	 */
	public AclDeviceTimeRange getByAclDeviceAndTimeRange(AclDevice aclDevice, TimeRange timeRange);
	/**
	 * 根据ACL设备删除ACL设备与时间段关系
	 * @param aclDevice ACL设备
	 */
	public void deleteByAclDevice(AclDevice aclDevice);
	
	/**
	 * 是否存在时间段与设备的关联
	 * @param aclDevice　设备
	 * @param timeRange　时间段
	 * @return　
	 */
	public boolean isExistDeviceTimeRange(AclDevice aclDevice, TimeRange timeRange);
	
	/**
	 * 根据时间段判断是否存在修改标志位为已修改的ACL设备与时间段关系
	 * @param entity 时间段
	 * @return 是否存在ACL设备与时间段关系
	 */
	public boolean existByTimeRangeAndChanged(TimeRange entity);
	
	/**
	 * 根据时间段更新关系的修改标志位
	 * @param entity 时间段
	 */
	public void updateChangedByTimeRange(TimeRange entity);
	/**
	 * 取得有变更的ACL设备列表
	 * @return
	 */
	public List<AclDeviceTimeRange> getAclDeviceByChanged(TimeRange entity);
	
	/**
	 * 添加设备与ACL时间段关系
	 * @param accessGroupList ACL时间段列表
	 * @param device 设备
	 */
	public void addTimeRangeDevices(List<TimeRange> timeRangeList,Device device);
	
	/**
	 * 根据ACL时间段删除ACL设备与ACL时间段关系
	 * @param accessGroup ACL组
	 */
	public void deleteByTimeRange(String timeRangeid,String deiveid);
	
	/**
	 * 通过ACL组和acl设备保存deviceTimeRangeService
	 * @param accessGroup
	 * @param aclDevice
	 */
	public void saveAclDeviceTimeRange(AccessGroup accessGroup,Device device);
	/**
	 * 根据ACL设备取得所有ACL设备与时间段关系
	 * @param entity ACL设备
	 * @return ACL设备与时间段关系
	 */
	public List<AclDeviceTimeRange> getByAclDevice(AclDevice entity);
	/**
	 * 根据ACL设备取得时间段
	 * @param entity ACL设备
	 * @return 时间段列表
	 */
	public List<TimeRange> getTimeRangeByAclDevice(AclDevice entity);
	
	/**
	 * 根据时间段更新关系的修改标志位
	 * 
	 * @param entity
	 *            时间段
	 */
	public void updateChangedByTimeRange(TimeRange entity,boolean isChanged,AclDevice aclDevice);
}
